#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ford UK NGc2 数据抓取项目
主入口文件
"""

import sys
import json
import os
from src.scraper import FordScraper


def parse_arguments():
    """解析命令行参数"""
    if len(sys.argv) < 2:
        print("使用方法: python main.py model=focus")
        sys.exit(1)
    
    # 解析 model=focus 格式的参数
    arg = sys.argv[1]
    if '=' not in arg:
        print("参数格式错误，应为: model=focus")
        sys.exit(1)
    
    key, value = arg.split('=', 1)
    if key != 'model':
        print("当前只支持model参数")
        sys.exit(1)
    
    return value


def load_config():
    """加载配置文件"""
    config_file = 'fetchNgc2.json'
    
    if not os.path.exists(config_file):
        print(f"错误：配置文件 {config_file} 不存在")
        sys.exit(1)
    
    try:
        with open(config_file, 'r', encoding='utf-8') as f:
            return json.load(f)
    except json.JSONDecodeError as e:
        print(f"错误：配置文件格式不正确 - {e}")
        sys.exit(1)
    except Exception as e:
        print(f"错误：读取配置文件失败 - {e}")
        sys.exit(1)


def validate_config(config, model):
    """验证配置文件内容"""
    if not isinstance(config, dict):
        print("错误：配置文件格式不正确")
        return False
    
    if config.get('model') != model:
        print(f"错误：配置文件中未找到模型 '{model}'")
        print(f"配置文件中的模型: {config.get('model')}")
        return False
    
    if 'sub_model' not in config:
        print("错误：配置文件中缺少 'sub_model' 配置")
        return False
    
    sub_model_config = config['sub_model']
    if not isinstance(sub_model_config, dict):
        print("错误：'sub_model' 配置格式不正确")
        return False
    
    if 'url' not in sub_model_config:
        print("错误：'sub_model' 配置中缺少 'url'")
        return False
    
    if 'output_file' not in sub_model_config:
        print("错误：'sub_model' 配置中缺少 'output_file'")
        return False
    
    return True


def main():
    """主函数"""
    print("Ford UK NGc2 数据抓取工具启动...")
    
    # 解析命令行参数
    model = parse_arguments()
    print(f"目标模型: {model}")
    
    # 加载配置文件
    config = load_config()
    print("配置文件加载成功")
    
    # 验证配置
    if not validate_config(config, model):
        sys.exit(1)
    
    print(f"目标URL: {config['sub_model']['url']}")
    print(f"输出文件: {config['sub_model']['output_file']}")
    
    # 确保输出目录存在
    output_file = config['sub_model']['output_file']
    output_dir = os.path.dirname(output_file)
    if output_dir and not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"创建输出目录: {output_dir}")
    
    # 启动爬虫
    try:
        scraper = FordScraper(config)
        scraper.run()
        print("数据抓取完成!")
    except KeyboardInterrupt:
        print("\n用户中断程序")
        sys.exit(1)
    except Exception as e:
        print(f"程序执行出错: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()
